home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / P_ROBO31.ZIP / WERUN2.PR < prev    next >
Text File  |  1989-10-31  |  7KB  |  198 lines

  1. (**************************************************************************)
  2. (*                             W A R N I N G                              *)
  3. (*                                                                        *)
  4. (*  This Robot has NOT been designed to take advantage of the advanced    *)
  5. (*  features of P-ROBOTS, such as, Shields, Fuel or Obstructions.         *)
  6. (**************************************************************************)
  7.  
  8.   {****************************************************************** }
  9.   {  robot  WERUN2.pr             Sandra Swetnick Unger   Dec 6, 1989 }
  10.   {               tag team with WERUN1.pr                             }
  11.   {****************************************************************** }
  12.  
  13.   PROCEDURE WERUN2;
  14.  
  15.   TeamAlly = "werun1";
  16.  
  17.   VAR
  18.     drv_dir : Integer;            { drive direction }
  19.     scn_dir : Integer;            { scan direction }
  20.     range : Integer;              { range to oponent }
  21.     x, y : Integer;               { x and y coordinates }
  22.     z : Integer;                  { z defines the edge of a square     }
  23.                                   { when z exceeds a predefined value  }
  24.                                   { the robot is approaching a wall    }
  25.     I : Integer;                  { looping variable  }
  26.     N : Integer;                  { width of the scan }
  27.     newscan : Integer;            { most recent scan direction }
  28.     x_max : Integer;
  29.     y_max : Integer;
  30.     x_switch : Integer;
  31.     y_switch : Integer;
  32.     {******************************************************************}
  33.     {  Determine if the enemy robot is a "Hunter" or a "non-Hunter"    }
  34.     {  Sit and wait for the enemy robot to attack                      }
  35.     {******************************************************************}
  36.  
  37.   BEGIN                           { Main }
  38.  
  39.     drv_dir := Angle_To(900, 500);
  40.     DRIVE(drv_dir, 100);
  41.  
  42.     scn_dir := Angle_To(500, 500)-90;
  43.     REPEAT                        { find the enemy }
  44.       scn_dir := scn_dir+20;
  45.       range := SCAN(scn_dir, 10);
  46.     UNTIL range <> 0;
  47.  
  48.     CANNON(scn_dir, range);
  49.     CANNON(scn_dir, range-20);
  50.  
  51.     {******************************************************************}
  52.     BEGIN
  53.  
  54.       REPEAT                      { get to a side }
  55.         x := loc_x;
  56.         FOR I := -N TO N DO
  57.           BEGIN
  58.             newscan := scn_dir+(20*I);
  59.             range := SCAN(newscan, 10);
  60.             IF (range <> 0) THEN
  61.               BEGIN
  62.                 CANNON(newscan, range);
  63.                 I := N;
  64.                 range := SCAN(newscan, 10);
  65.                 CANNON(newscan, range);
  66.               END;
  67.           END;
  68.         IF (range > 10) THEN scn_dir := newscan
  69.         ELSE scn_dir := scn_dir+90;
  70.         IF range > 25 THEN CANNON(newscan-12, range);
  71.         IF range = 0 THEN N := 2
  72.         ELSE N := 1;
  73.         IF range > 10 THEN CANNON(newscan+12, range);
  74.         DRIVE(drv_dir, 100);
  75.       UNTIL x > 750;
  76.  
  77.       REPEAT
  78.         REPEAT
  79.           drv_dir := Angle_To(900, 900);
  80.           DRIVE(drv_dir, 100);
  81.           FOR I := -N TO N DO
  82.             BEGIN
  83.               newscan := scn_dir+(20*I);
  84.               range := SCAN(newscan, 10);
  85.               IF (range > 10) THEN
  86.                 BEGIN
  87.                   CANNON(newscan, range);
  88.                   I := N;
  89.                   range := SCAN(newscan, 10);
  90.                   CANNON(newscan, range);
  91.                 END;
  92.             END;
  93.           IF (range > 10) THEN scn_dir := newscan
  94.           ELSE IF x < 120 THEN scn_dir := 0
  95.           ELSE IF x > 880 THEN scn_dir := 180
  96.           ELSE IF y < 120 THEN scn_dir := 90
  97.           ELSE IF y > 880 THEN scn_dir := 270
  98.           ELSE scn_dir := scn_dir+90;
  99.           IF range > 10 THEN CANNON(newscan, range+15);
  100.           IF range = 0 THEN N := 2
  101.           ELSE N := 1;
  102.           IF range > 25 THEN CANNON(newscan, range-15);
  103.           y := loc_y;
  104.         UNTIL y > 750;
  105.  
  106.  
  107.         REPEAT
  108.           drv_dir := Angle_To(100, 900);
  109.           DRIVE(drv_dir, 100);
  110.           FOR I := -N TO N DO
  111.             BEGIN
  112.               newscan := scn_dir+(20*I);
  113.               range := SCAN(newscan, 10);
  114.               IF (range > 10) THEN
  115.                 BEGIN
  116.                   CANNON(newscan, range);
  117.                   I := N;
  118.                   range := SCAN(newscan, 10);
  119.                   CANNON(newscan, range);
  120.                 END;
  121.             END;
  122.           IF (range > 10) THEN scn_dir := newscan
  123.           ELSE IF x < 120 THEN scn_dir := 0
  124.           ELSE IF x > 880 THEN scn_dir := 180
  125.           ELSE IF y < 120 THEN scn_dir := 90
  126.           ELSE IF y > 880 THEN scn_dir := 270
  127.           ELSE scn_dir := scn_dir+90;
  128.           IF range > 10 THEN CANNON(newscan, range+15);
  129.           IF range = 0 THEN N := 2
  130.           ELSE N := 1;
  131.           IF range > 25 THEN CANNON(newscan, range-15);
  132.           x := loc_x;
  133.         UNTIL x < 250;
  134.  
  135.  
  136.         REPEAT
  137.           drv_dir := Angle_To(100, 100);
  138.           DRIVE(drv_dir, 100);
  139.           FOR I := -N TO N DO
  140.             BEGIN
  141.               newscan := scn_dir+(20*I);
  142.               range := SCAN(newscan, 10);
  143.               IF (range > 10) THEN
  144.                 BEGIN
  145.                   CANNON(newscan, range);
  146.                   I := N;
  147.                   range := SCAN(newscan, 10);
  148.                   CANNON(newscan, range);
  149.                 END;
  150.             END;
  151.           IF (range > 10) THEN scn_dir := newscan
  152.           ELSE IF x < 120 THEN scn_dir := 0
  153.           ELSE IF x > 880 THEN scn_dir := 180
  154.           ELSE IF y < 120 THEN scn_dir := 90
  155.           ELSE IF y > 880 THEN scn_dir := 270
  156.           ELSE scn_dir := scn_dir+90;
  157.           IF range > 10 THEN CANNON(newscan, range+15);
  158.           IF range = 0 THEN N := 2
  159.           ELSE N := 1;
  160.           IF range > 25 THEN CANNON(newscan, range-15);
  161.           y := loc_y;
  162.         UNTIL y < 250;
  163.  
  164.  
  165.         REPEAT
  166.           drv_dir := Angle_To(900, 100);
  167.           DRIVE(drv_dir, 100);
  168.           FOR I := -N TO N DO
  169.             BEGIN
  170.               newscan := scn_dir+(20*I);
  171.               range := SCAN(newscan, 10);
  172.               IF (range > 10) THEN
  173.                 BEGIN
  174.                   CANNON(newscan, range);
  175.                   I := N;
  176.                   range := SCAN(newscan, 10);
  177.                   CANNON(newscan, range);
  178.                 END;
  179.             END;
  180.           IF (range > 10) THEN scn_dir := newscan
  181.           ELSE IF x < 120 THEN scn_dir := 0
  182.           ELSE IF x > 880 THEN scn_dir := 180
  183.           ELSE IF y < 120 THEN scn_dir := 90
  184.           ELSE IF y > 880 THEN scn_dir := 270
  185.           ELSE scn_dir := scn_dir+90;
  186.           IF range > 10 THEN CANNON(newscan, range+15);
  187.           IF range = 0 THEN N := 2
  188.           ELSE N := 1;
  189.           IF range > 25 THEN CANNON(newscan, range-15);
  190.           x := loc_x;
  191.         UNTIL x > 750;
  192.  
  193.  
  194.       UNTIL DEAD OR WINNER;
  195.     END;                          { end TAG }
  196.  
  197.   END;                            { Main}
  198.